{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "\n",
    "#用于计算feature字段的文本特征提取\n",
    "from sklearn.feature_extraction.text import  CountVectorizer\n",
    "#from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "\n",
    "#CountVectorizer为稀疏特征，特征编码结果存为稀疏矩阵xgboost处理更高效\n",
    "from scipy import sparse\n",
    "\n",
    "#对类别型特征进行编码\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "#from MeanEncoder import MeanEncoder\n",
    "\n",
    "#对地理位置通过聚类进行离散化\n",
    "from sklearn.cluster import KMeans\n",
    "from nltk.metrics import distance as distance\n",
    "\n",
    "#可视化\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = pd.read_csv('./RentListingInquries_FE_train.csv')\n",
    "X_test = pd.read_csv('./RentListingInquries_FE_test.csv')\n",
    "test_id = X_test['listing_id']  #保留，生成提交文件时需要\n",
    "X_test.drop(['listing_id'], axis=1,inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop(['interest_level'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1000 entries, 0 to 999\n",
      "Columns: 225 entries, bathrooms to interest_level\n",
      "dtypes: float64(7), int64(218)\n",
      "memory usage: 1.7 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wic</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>yoga</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>40.7145</td>\n",
       "      <td>-73.9425</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7947</td>\n",
       "      <td>-73.9667</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7388</td>\n",
       "      <td>-74.0018</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7539</td>\n",
       "      <td>-73.9677</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>40.8241</td>\n",
       "      <td>-73.9493</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 224 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  latitude  longitude  price  price_bathrooms  \\\n",
       "0        1.5         3   40.7145   -73.9425   3000           1200.0   \n",
       "1        1.0         2   40.7947   -73.9667   5465           2732.5   \n",
       "2        1.0         1   40.7388   -74.0018   2850           1425.0   \n",
       "3        1.0         1   40.7539   -73.9677   3275           1637.5   \n",
       "4        1.0         4   40.8241   -73.9493   3350           1675.0   \n",
       "\n",
       "   price_bedrooms  room_diff  room_num  Year  ...   walk  walls  war  washer  \\\n",
       "0      750.000000       -1.5       4.5  2016  ...      0      0    0       0   \n",
       "1     1821.666667       -1.0       3.0  2016  ...      0      0    0       0   \n",
       "2     1425.000000        0.0       2.0  2016  ...      0      0    0       0   \n",
       "3     1637.500000        0.0       2.0  2016  ...      0      0    0       0   \n",
       "4      670.000000       -3.0       5.0  2016  ...      0      0    1       0   \n",
       "\n",
       "   wheelchair  wic  wifi  windows  work  yoga  \n",
       "0           0    0     0        0     0     0  \n",
       "1           0    0     0        0     0     0  \n",
       "2           0    0     0        0     0     0  \n",
       "3           0    0     0        0     0     0  \n",
       "4           0    0     0        0     0     0  \n",
       "\n",
       "[5 rows x 224 columns]"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wic</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>yoga</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7185</td>\n",
       "      <td>-73.9865</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7278</td>\n",
       "      <td>-74.0000</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>40.7306</td>\n",
       "      <td>-73.9890</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7109</td>\n",
       "      <td>-73.9571</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>40.7650</td>\n",
       "      <td>-73.9845</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 224 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  latitude  longitude  price  price_bathrooms  \\\n",
       "0        1.0         1   40.7185   -73.9865   2950      1475.000000   \n",
       "1        1.0         2   40.7278   -74.0000   2850      1425.000000   \n",
       "2        1.0         1   40.7306   -73.9890   3758      1879.000000   \n",
       "3        1.0         2   40.7109   -73.9571   3300      1650.000000   \n",
       "4        2.0         2   40.7650   -73.9845   4900      1633.333333   \n",
       "\n",
       "   price_bedrooms  room_diff  room_num  Year  ...   walk  walls  war  washer  \\\n",
       "0     1475.000000        0.0       2.0  2016  ...      0      0    0       0   \n",
       "1      950.000000       -1.0       3.0  2016  ...      0      0    1       0   \n",
       "2     1879.000000        0.0       2.0  2016  ...      0      0    0       0   \n",
       "3     1100.000000       -1.0       3.0  2016  ...      0      0    0       0   \n",
       "4     1633.333333        0.0       4.0  2016  ...      0      0    1       0   \n",
       "\n",
       "   wheelchair  wic  wifi  windows  work  yoga  \n",
       "0           0    0     0        0     0     0  \n",
       "1           0    0     0        0     0     0  \n",
       "2           0    0     0        0     0     0  \n",
       "3           1    0     0        0     0     0  \n",
       "4           0    0     0        0     0     0  \n",
       "\n",
       "[5 rows x 224 columns]"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "ss_X = StandardScaler()\n",
    "X_train = ss_X.fit_transform(X_train)\n",
    "X_test = ss_X.fit_transform(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train_part,X_val,y_train_part,y_val = train_test_split(X_train,y_train,train_size=0.8,random_state=0)\n",
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "SVC1 = LinearSVC().fit(X_train_part,y_train_part)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.17      0.12      0.14         8\n",
      "          1       0.54      0.32      0.40        59\n",
      "          2       0.74      0.89      0.81       133\n",
      "\n",
      "avg / total       0.66      0.69      0.66       200\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[  1   4   3]\n",
      " [  2  19  38]\n",
      " [  3  12 118]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn import metrics\n",
    "y_predict = SVC1.predict(X_val)\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"\n",
    "      % (SVC1, metrics.classification_report(y_val, y_predict)))\n",
    "print(\"Confusion matrix:\\n%s\" % metrics.confusion_matrix(y_val, y_predict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# test_id = X_test['listing_id']  #保留，生成提交文件时需要\n",
    "# X_test.drop(['listing_id'], axis=1,inplace = True)\n",
    "X_test_predict = SVC1.predict(X_test)\n",
    "\n",
    "\n",
    "X_test_predict = pd.DataFrame(X_test_predict,index=test_id,columns=['interest_level'])\n",
    "# X_test_predict\n",
    "# X_test_predict.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_map = { 2:'low', 1:'medium', 0:'high'}\n",
    "X_test_predict['interest_level'] = X_test_predict['interest_level'].apply(lambda x: y_map[x])\n",
    "# X_test_predict"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "X_test_predict.to_csv(\"SVM_pred.csv\",header=True,index_label='Id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_Linear(C,X_train,y_train,X_val,y_val):\n",
    "    SVC2 = LinearSVC(C=C)\n",
    "    SVC2 = SVC2.fit(X_train,y_train)\n",
    "    \n",
    "    accuracy=SVC2.score(X_val,y_val)\n",
    "    print(\"accuracy:{}\".format(accuracy))\n",
    "    return accuracy\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy:0.74\n",
      "accuracy:0.755\n",
      "accuracy:0.76\n",
      "accuracy:0.76\n",
      "accuracy:0.745\n",
      "accuracy:0.71\n",
      "accuracy:0.665\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11eacba8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-3, 3, 7)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份  \n",
    "#penalty_s = ['l1','l2']\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, X_train, y_train, X_val, y_val)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()\n",
    "  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    # 在训练集是那个利用SVC训练\n",
    "    SVC3 =  SVC( C = C, kernel='rbf', gamma = gamma)\n",
    "    SVC3 = SVC3.fit(X_train, y_train)\n",
    "    \n",
    "    # 在校验集上返回accuracy\n",
    "    accuracy = SVC3.score(X_val, y_val)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.665\n",
      "accuracy: 0.73\n",
      "accuracy: 0.95\n",
      "accuracy: 0.995\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 0.92\n",
      "accuracy: 0.995\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n",
      "accuracy: 1.0\n"
     ]
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-2, 2, 5)# logspace(a,b,N)把10的a次方到10的b次方区间分成N份 \n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_val, y_val)\n",
    "        accuracy_s.append(tmp)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xac810f0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "pyplot.savefig('RBF_SVM_Otto.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
